using Dew.Math;
using Dew.Math.Units;
using Dew.Signal;
using Dew.Signal.Units;
using Dew.Math.Tee;
using Dew.Math.Editors;
using Dew.Signal.Tee;
private void button1_Click(
object sender, EventArgs e)
{
int n,i;
double FS = 1;
//sampling frequency
TIntegrateState State2 =
new TIntegrateState();
TDiffState State =
new TDiffState();
Vector h =
MtxExpr.Ramp(30, TMtxFloatPrecision.mvDouble, 0, 1);
Vector b =
new Vector(h.Length);
Vector c =
new Vector(h.Length);
//single block
SignalUtils.Integrate(h, b,
ref State2, 1.0/FS);
SignalUtils.Differentiate(b, c,
ref State, 1.0 / FS);
MtxVecTee.DrawIt(c,"Processed in one block",
false);
//streaming
//reset initial conditions
State2 =
new TIntegrateState();
State =
new TDiffState();
n = h.Length / 10;
//integer division (!)
for (i = 0; i < 10; i++)
{
h.SetSubRange(i*n,n);
b.SetSubRange(i*n,n);
c.SetSubRange(i*n,n);
SignalUtils.Integrate(h,b,
ref State2, 1.0/FS);
// Should be: b = [0 , 1 , 3, 6, 10, 15, 21,... ]
// But becomes: b = [0, 0.1666, 1.1666, 3.166, 6.166, 10.166, 15.166, 21.166,... ]
// because of Simpson
SignalUtils.Differentiate(b,c,
ref State,1.0/FS);
// Should be: c = [0,1,2,3,4,5,6....]
// But becomes: c = [0, 0.08333, 0.5833, 1.5, 2.5, 3.5, 4.5....]
}
c.SetFullRange();
MtxVecTee.DrawIt(c,"Processed per partes, but same result",
false);
}